\documentclass[12pt,a4paper]{article}
\usepackage{polski}
\usepackage[utf8]{inputenc}
\usepackage{a4wide}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{}
\chead{Scenariusze testowania}
\rhead{Strona \thepage}
\lfoot{}
\cfoot{}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt}
\def\thesection{\arabic{section}.}
\def\thesubsection{\thesection\arabic{subsection}.}
\def\thesubsubsection{\thesubsection\arabic{subsubsection}.}

\title{{\LARGE\textbf{Projekt Kino}}\\ \large{Scenariusze testowania}}
\author{Paweł Chwała, Piotr Kieć, Jacek Fiedorowicz}

\begin{document}
\maketitle
\vfill
\nopagebreak
\begin{flushleft}
	\begin{tabular}{||c|c|c|l||}\hline
	\multicolumn{4}{|c|}{\textbf{Spis wersji}}\\ \hline\hline
	\textbf{Data} & \textbf{Wersja} & \textbf{Autor} & \textbf{Opis wprowadzonych zmian dokumentu}\\ \hline
	13 stycznia & 1.0.0 & Piotr Kieć & utworzenie i edycja dokumentu  \\ \hline
	27 stycznia & 1.1.0 & Piotr Kieć & testowanie przypadków użycia  \\ \hline
	\end{tabular}
\end{flushleft}

\thispagestyle{empty}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage

\section{Wstęp}
Niniejszy dokument zawiera opis i plan testowania oprogramowania wytworzonego w ramach realizacji projektu \emph{Kino}.

\section{Testy w czasie implementacji}
Podczas implementowania kolejnych elementów aplikacji każdy programista jest odpowiedzialny za przetestowanie swojego kodu. Programista musi samodzielnie przygotować testy dla odpowiednich partii kodu. Do wykonywania testów jednostkowych wykorzystywane jest narzędzie \emph{PHP Unit}.

\section{Testowanie funkcjonalności}
Poza testami jednostkowymi przeprowadzone zostaną także testy sprawdzające, czy poprawnie zostały zaimplementowane poszczególne przypadki użycie opisane w dokumencie \emph{Specyfikacja wymagań}. Testy nie będą wykonywane automatycznie, ale przez fizyczną osobę.

Podczas wykonywania zadania osoba sprawdza, czy aplikacja zachowuje się zgodnie ze specyfikacją. Podane przypadki użycia opisują podstawową funkcjonalność oprogramowania, dlatego w przypadku znalezienia błędu trzeba bezzwłocznie go poprawić. Ponadto każda osoba indywidualnie testuje aplikacje bazując na własnym doświadczeniu. 

Po każdych wprowadzonych zmianach w aplikacji należy ją ponownie przetestować. W przypadku znalezienia błędu zostaje on zgłoszony za pomocą systemu \emph{Bugzilla}.

\subsection{Testy poprawności danych}
Aby nie dopuścić możliwości wprowadzenia niepoprawnych danych, dla każdego formularza należy przetestować czy wprowadzane dane spełniają poniższe kryteria. Aby wykonać test do formularza osoba wykonująca test wprowadza poprawne lub niepoprawne dane. W przypadku wprowadzanie poprawnych danych, system powinien zaakceptować dany ciąg, jeśli wprowadzone dane nie są poprawne, system powinien wyświetlić komunikat o niepoprawnych danych. Jeśli zasada ta zostanie gdzieś naruszona, należy głosić błąd jako krytyczny.

\subsubsection{Login}
\begin{itemize}
 \item min. długość: 3 znaki
 \item max. długość: 20 znaków
 \item dopuszczalne znaki: małe i duże litery alfabetu angielskiego
\end{itemize}

\subsubsection{Hasło}
\begin{itemize}
 \item min. długość: 6 znaków
 \item max. długość: 20 znaków
 \item dopuszczalne znaki: małe i duże litery alfabetu angielskiego, cyfry
\end{itemize}

\subsubsection{Tytuł}
\begin{itemize}
 \item max. długość: 50 znaków
 \item dopuszczalne znaki: zestaw znaków zgodny ze standardem UTF-8.
\end{itemize}

\subsubsection{Data}
\begin{itemize}
 \item ciąg znaków postaci: yyyy-mm-dd (yyyy - to rok, mm - to miesiąć, dd - dzień)
 \item poprawna data
\end{itemize}

\subsection{Inne pola tekstowe}
\begin{itemize}
 \item max. długość: 4000 znaków.
 \item dopuszczalne znaki: zestaw znaków zgodny ze standardem UTF-8.
\end{itemize}



\subsection{Testy przypadków użycia}
Poniżej przedstawiono testy które należy wykonać dla poszczególnych przypadków użycia. Oznaczanie \emph{wejście} odnosi się do czynności, które wykonuje użytkownik. Oznaczenie \emph{wyjście} natomiast oznacza oczekiwaną reakcję systemu. Oznaczenie \emph{błąd} oznacza, jaką czynność należy wykonać w przypadku znalezienia błędu. Przed testami każda osoba, która wykonuje test, otrzymuje informacje o loginie i haśle, aby skorzystać z systemu. Przy wykonywaniu testów baza danych musi być wypełniona pewnymi danymi.

\subsubsection*{Przypadek 1 (filmy)}
Jako niezalogowany użytkownik:
\begin{itemize}
 \item wejście: wybieranie kategorii \emph{filmy} z menu głównego
 \item wyjście: wypisanie listy filmów dostępnych w kinie wraz z tytułem, opisem, informacją o reżyserze, gatunku, czasem trawania filmu, kategorią wiekową, a także datą premiery.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 2 (wydarzenia)}
Jako niezalogowany użytkownik:
\begin{itemize}
 \item wejście: wybieranie kategorii \emph{filmy} z menu głównego
 \item wyjście: wypisanie listy wydarzeń, jakie mają miejsce w kinie wraz z nazwą, opisem, informacją o dacie wydarzenia, dostępnych miejscach i ilością osób zapisanych na dane wydarzenie.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 3 (repertuar)}
Jako niezalogowany użytkownik:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{repertuar}
 \item wyjście: wypisanie listy seansów wraz z informacją o tytule filmu, numerze sali, dacie i cenie.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 4 (rejestracja)}
Jako niezalogowany użytkownik:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{zaloguj się}, potem \emph{rejestracja} i poprawne wypełnienie znajdujących się danych w formularzu (tzn. \emph{imię}, \emph{nazwisko}, \emph{email}, \emph{nr telefonu}, \emph{login}, \emph{hasło}, \emph{data urodzenia}), a następnie wciśnięcie przycisku \emph{zarejestruj konto}.
 \item wyjście: wypisanie informacji o udanym przebiegu rejestracji
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 5.1 (logowanie)}
Jako niezalogowany użytkownik:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{zaloguj się}, następnie wpisanie poprawnego loginu i hasła istniejącego w systemie. Wciśnięcie przycisku \emph{zaloguj się}.
 \item wyjście: wyświetlenie komunikatu o udany zalogowaniu.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 5.2 (nieudane logowanie)}
Jako niezalogowany użytkownik:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{zaloguj się}, następnie wpisanie niepoprawnego loginu i hasła, które nie istnieje w systemie. Wciśnięcie przycisku \emph{zaloguj się}.
 \item wyjście: wyświetlenie komunikatu o nieudanym logowaniu.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 6 (wylogowywanie)}
Jako klient:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{wyloguj się}.
 \item wyjście: informacja o udanym wylogowaniu.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 7 (zapisywanie się na wydarzenie)}
Jako klient:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{wydarzenia}, a następnie \emph{zapisz się}
 \item wyjście: informacja o udanym zapisaniu na wydarzenie
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 8.1 (wypisywanie się z wydarzenia)}
Jako klient:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{wydarzenia} i wybranie wydarzenia, z którego klient może się wypisać, a następnie kliknięcie \emph{wypisz się}
 \item wyjście: komunikat o udanym wypisaniu się z wydarzanie
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 8.2 (wypisywanie się z wydarzenia)}
Jako klient:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{twoje zapisy i rezerwacje} i wybranie któregoś wydarzenia, z którego klient może się wypisać, a następnie wciśnięcie przycisku \emph{wypisz się}.
 \item wyjście: komunikat o udanym wypisaniu się z wydarzenia oraz usunięcie wydarzenia z listy.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 9 (zapisywanie się na seans)}
Jako klient:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{repertuar}, wybranie któregoś z seansu i wybranie \emph{rezerwuj bilet}, a następnie wybranie miejsc.
 \item wyjście: wyświetlenie informację o udanej rezerwacji
 \item błąd: jeśli zostanie wyświetlona informacja, że miejsce są już zarezerwowane, błąd pominąć (jeśli rzeczywiście zostały zarezerwowane). W przeciwnym przypadku błąd jest krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 10 (wypisywanie się z seansu)}
Jako klient:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{twoje zapisy i rezerwacje}, potem wybranie sensu z którego chcemy się wypisać, a następnie wybranie \emph{anuluj rezerwacje}.
 \item wyjście: informacja o udanym anulowaniu rezerwacji.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 11 (akceptowanie rezerwacji na seans)}
Jako kasjer:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{rezerwacje}, następnie wybranie którejś osoby z listy i wciśnięcie przycisku \emph{zreazlizuj}.
 \item wyjście: informacja o zaakceptowaniu rezerwacji i przeniesieniu użytkownika do listy zaakceptowanych rezerwacji.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 12 (anulowanie rezerwacji na seans)}
Jako kasjer:
\begin{itemize}
 \item wejście: wybranie kategori \emph{rezerwacje}, wybranie którejś pozycji z listy rezerwacji i wciśnięcie przycisku \emph{usuń}.
 \item wyjście: informacja o pomyślnym anulowaniu rezerwacji i usunięcie rezerwacji z listy.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 13 (usuwanie zapisu na wydarzenie)}
Jako kasjer:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{zapisy}, wybranie którejś pozycji z listy i wciśnięcie przycisku \emph{usuń zapis}
 \item wyjście: informacja o pomyślnym wykonaniu czynności, usunięcie pozycji z listy.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsection*{Przypadek 14 (dodawanie filmu)}
Jako dodawacz:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{filmy}, wciśnięcie przycisku \emph{dodaj filmy}, wypełnienie formularza poprawnymi danymi i zaakceptowaniu danych.
 \item wyjście: informacja o udanym wykonaniu czynności. Dodanie pozycji w kategorii \emph{filmy}.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsection*{Przypadek 15 (dodawanie wydarzenia)}
Jako dodawacz:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{wydarzenia}, następnie \emph{dodaj wydarzenie}, wypełnienie formularza i zaakceptowanie.
 \item wyjście: informacja o pomyślnym wykonaniu czynności, w kategorii \emph{wydarzenia} powinna się pojawić nowa pozycja.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsection*{Przypadek 16 (dodawanie nowego seansu)}
Jako dodawacz:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{repertuar}, potem \emph{dodaj nowy seans}, wypełnienie formularza i wysłanie.
 \item wyjście: informacja o pomyślnym wykonaniu czynności, w \emph{repertuerze} pojawia się nowa pozycja.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 16 (nadawanie praw dodawacza)}
Jako administrator:
\begin{itemize}
 \item wejście: wybranie kategori \emph{użytkownicy}, wybranie odpowiedniego użytkownika i wciśnięcie przycisku \emph{nadaj uprawnienia dodawacza}.
 \item wyjście: komunikat o pomyślnym wykonaniu czynności, obok użytkownika znajduje się informacja, że jest on \emph{dodawaczem}.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 17 (usuwanie praw dodawacza)}
Jako administrator:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{użytkownicy}, następnie wybranie odpowiedniego użytkownika i wybranie \emph{usuń uprawnienia dodawacza}.
 \item wyjście: informacja o usunięciu uprawnienia.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 18 (nadawanie praw kasjera)}
Jako administrator:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{użytkownicy}, wybranie odpowiedniego użytkownika i wciśnięcie przycisku \emph{nadaj uprawnienia kasjera}.
 \item wyjście: komunikat o pomyślnym wykonaniu czynności, obok użytkownika znajduje się informacja, że jest on \emph{kasjerem}.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\subsubsection*{Przypadek 19 (usuwanie praw kasjera)}
Jako administrator:
\begin{itemize}
 \item wejście: wybranie kategorii \emph{użytkownicy}, następnie wybranie odpowiedniego użytkownika i wybranie \emph{usuń uprawnienia kasjera}.
 \item wyjście: informacja o usunięciu uprawnienia.
 \item błąd: błąd krytyczny, należy go jak najprędzej poprawić.
\end{itemize}

\section{Testowanie wydajnościowe}
Po wykonaniu testów funkcjonalnych należy wykonać testy wydajnościowe. Wykonujemy następujące testy:
\begin{itemize}
 \item sprawdzamy, czy system sprawnie funkcjonuje, gdy jednocześnie dany przypadek użycia wykonuje 30 użytkowników systemu (każdy przypadek rozważamy oddzielnie)
 \item sprawdzamy, czy system sprawnie funkcjonuje, gdy jednocześnie 60 użytkowników wykorzystuje system (mogą wykonywać różne zadania).
\end{itemize}

Testy są wykonywane na specjalnie przygotowanym do tego serwerze.

Jeśli system nie przejdzie testów pomyślnie, należy się zastanowić, gdzie został popełniony błąd. W przypadku naprawienia znalezionych błędów, należy powtórnie przejść wszystkie etapy testowania.

\section{Wersja finalna}
Zanim zostanie wydana wersja finalna, należy jeszcze raz przejść wszystkie etapy testowania. W przypadku znalezienia pewnych błędów, należy rostrzygnąć, co z nimi zrobić. Zalecane jest naprawienie tych błędów.

System jest gotowy do użytku i sprzedaży, jeśli pomyślnie przejdzie wszystkie \emph{testy funkcjonalne} i \emph{testy wydajnościowe}. W uzasadnionych przypadkach można pominąć niektóre odnalezione błędy.

\end{document} 
